﻿using System;
namespace TribesPSO
{
    /// <summary>
    /// This interface allows the user to implement their own RNG that has, at a minimum a NextGaussian()
    /// function and a NextGaussian(double mu, double sigma) function and use it in existing PSO implementations
    /// </summary>
    public interface IGaussianRandom: IRandom
    {
        /// <summary>
        /// Generate a random number based on a gaussian distribution with a mean of zero and a standard
        /// deviation of 1
        /// </summary>
        /// <returns></returns>
        double NextGaussian();

        /// <summary>
        /// Generate a random number with a specified mean and standard deviation
        /// </summary>
        /// <param name="mu"></param>
        /// <param name="sigma"></param>
        /// <returns></returns>
        double NextGaussian(double mu, double sigma);
    }
}
